package com.xcj.springai.chatMemory;


/**
 * 低版本的向量库
 * 读取文件，并存入向量库
 * 嵌入模型 EmbeddingModel
 * 向量存储 VectorStore
 *
 */

import cn.hutool.core.io.resource.ClassPathResource;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.Embedding;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingRequest;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.*;


@Configuration
public class initInMemoryVectorStore {


//    @Bean
//    VectorStore vectorStore(EmbeddingModel embeddingModel) {
//        SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(embeddingModel)
//                .build();
//
//        List<Document> documents = List.of(
//                new Document("产品说明: 名称：Java开发语言\n" +
//                        "产品描述：Java是一种广泛使用的面向对象编程语言，具有平台无关性。\n" +
//                        "主要特性：\n" +
//                        "1. 面向对象：支持封装、继承、多态\n" +
//                        "2. 跨平台性：Java虚拟机（JVM）保证一次编写，处处运行\n" +
//                        "3. 自动内存管理：垃圾回收机制自动回收无用内存\n" +
//                        "4. 多线程支持：内置支持多线程编程\n" +
//                        "5. 丰富的标准库：包含集合、IO、网络、并发等功能库\n" +
//                        "应用领域：企业级应用、移动应用（安卓）、大数据处理、云计算、嵌入式系统\n"),
//
//                new Document("技术规格:\n" +
//                        "Java版本：目前最新为Java 20\n" +
//                        "编译过程：源代码 -> 字节码 -> JVM执行\n" +
//                        "垃圾收集器类型：串行、并行、G1、ZGC等\n" +
//                        "异常处理机制：try-catch-finally结构\n" +
//                        "安全性特征：字节码验证、访问控制、加密API支持\n"),
//
//                new Document("开发工具及生态:\n" +
//                        "主流IDE：IntelliJ IDEA, Eclipse, NetBeans\n" +
//                        "构建工具：Maven, Gradle\n" +
//                        "常用框架：Spring, Hibernate, Struts\n" +
//                        "测试工具：JUnit, TestNG\n" +
//                        "持续集成：Jenkins, GitHub Actions\n" +
//                        "包管理：Maven Central, JCenter\n"),
//
//                new Document("Java语言的历史和发展:\n" +
//                        "1995年由Sun Microsystems发布\n" +
//                        "后被Oracle收购\n" +
//                        "语言标准由Java Community Process (JCP)维护\n" +
//                        "不断演进，添加Lambda表达式、模块系统、记录类等现代特性\n"),
//                new Document(
//                        "nba的发展历史:\n" +
//                                "成立时间：NBA成立于1946年，最初名为“篮球协会联盟”（Basketball Association of America, BAA）。\n" +
//                                "合并形成：1949年，BAA与竞争对手“全国篮球联盟”（National Basketball League, NBL）合并，正式成立了“美国国家篮球协会”（NBA）。\n" +
//                                "早期球队：早期球队多集中在美国东北部和中西部。\n"),
//
//        new Document(
//                "1970年代：联盟的商业化和扩张:\n" +
//                        "NBA开始与ABA（美国篮球协会）竞争，1976年两者合并，带来了更多球队和明星，如朱利叶斯·欧文（Julius Erving）。\n" +
//                        "这个时期联盟开始面临一些挑战，如观众流失和球场暴力等问题。。\n" +
//                        "逐渐引入三分线等规则，提高比赛观赏性。\n")
//                );
//
//
//
//
//        simpleVectorStore.add(documents);
//        return simpleVectorStore;
//    }

//    @Bean
//    public VectorStore vectorStore(EmbeddingModel embeddingModel) throws IOException {
//        SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(embeddingModel)
//                .build();
//
//        ClassPathResource resource = new ClassPathResource("java_desc.txt");
//        String content = Files.readString(resource.getFile().toPath(), StandardCharsets.UTF_8);
//
//        // 按 ### 分割成多条文档
//        String[] parts = content.split("\\n###\\n");
//
//        List<Document> documents = Arrays.stream(parts)
//                .map(String::trim)
//                .filter(s -> !s.isEmpty())
//                .map(Document::new)
//                .toList();
//
//        simpleVectorStore.add(documents);
//        return simpleVectorStore;
//    }


    /**
     * spring ai alibaba 版本
     * @param embeddingModel
     * @return
     */

//    @Bean
//    VectorStore vectorStore(EmbeddingModel embeddingModel) {
//
//        // 创建向量库并添加向量
//        SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(embeddingModel).build();
//        // 构建你的原始文档内容列表
//        List<String> contents = List.of(
//                "产品说明: 名称：Java开发语言\n" +
//                        "产品描述：Java是一种广泛使用的面向对象编程语言，具有平台无关性。\n" +
//                        "主要特性：\n" +
//                        "1. 面向对象：支持封装、继承、多态\n" +
//                        "2. 跨平台性：Java虚拟机（JVM）保证一次编写，处处运行\n" +
//                        "3. 自动内存管理：垃圾回收机制自动回收无用内存\n" +
//                        "4. 多线程支持：内置支持多线程编程\n" +
//                        "5. 丰富的标准库：包含集合、IO、网络、并发等功能库\n" +
//                        "应用领域：企业级应用、移动应用（安卓）、大数据处理、云计算、嵌入式系统\n",
//
//                "技术规格:\n" +
//                        "Java版本：目前最新为Java 20\n" +
//                        "编译过程：源代码 -> 字节码 -> JVM执行\n" +
//                        "垃圾收集器类型：串行、并行、G1、ZGC等\n" +
//                        "异常处理机制：try-catch-finally结构\n" +
//                        "安全性特征：字节码验证、访问控制、加密API支持\n",
//
//                "开发工具及生态:\n" +
//                        "主流IDE：IntelliJ IDEA, Eclipse, NetBeans\n" +
//                        "构建工具：Maven, Gradle\n" +
//                        "常用框架：Spring, Hibernate, Struts\n" +
//                        "测试工具：JUnit, TestNG\n" +
//                        "持续集成：Jenkins, GitHub Actions\n" +
//                        "包管理：Maven Central, JCenter\n",
//
//                "Java语言的历史和发展:\n" +
//                        "1995年由Sun Microsystems发布\n" +
//                        "后被Oracle收购\n" +
//                        "语言标准由Java Community Process (JCP)维护\n" +
//                        "不断演进，添加Lambda表达式、模块系统、记录类等现代特性\n",
//
//                "nba的发展历史:\n" +
//                        "成立时间：NBA成立于1946年，最初名为“篮球协会联盟”（Basketball Association of America, BAA）。\n" +
//                        "合并形成：1949年，BAA与竞争对手“全国篮球联盟”（National Basketball League, NBL）合并，正式成立了“美国国家篮球协会”（NBA）。\n" +
//                        "早期球队：早期球队多集中在美国东北部和中西部。\n",
//
//                "1970年代：联盟的商业化和扩张:\n" +
//                        "NBA开始与ABA（美国篮球协会）竞争，1976年两者合并，带来了更多球队和明星，如朱利叶斯·欧文（Julius Erving）。\n" +
//                        "这个时期联盟开始面临一些挑战，如观众流失和球场暴力等问题。。\n" +
//                        "逐渐引入三分线等规则，提高比赛观赏性。\n"
//        );
//
//        // 调用 EmbeddingModel 生成向量
//        EmbeddingResponse embeddingResponse = embeddingModel.call(new EmbeddingRequest(contents, null));
//
//        List<Document> documents = new ArrayList<>();
//        for (int i = 0; i < contents.size(); i++) {
//            float[] vector = embeddingResponse.getResults().get(i).getOutput();
//            Embedding embedding = new Embedding(vector, i);
//
//            Map<String, Object> metadata = new HashMap<>();
//            metadata.put("embedding", embedding);
//
//            Document doc = new Document(contents.get(i), metadata);
//            documents.add(doc);
//        }
//        simpleVectorStore.add(documents);
//        return simpleVectorStore;
//    }


}
